iT邦幫忙

DAY 15
1

Swift - 從菜菜鳥到菜鳥的 30 天系列 第 15

[Swift-d15] - Basic - Table View 1 直接給值 Datasource, (Table View Scroll)

  • 分享至 

  • xImage
  •  

小弟的規劃表 - http://blog.kerkerj.in/blog/2014/11/01/planning/

好讀版 - http://blog.kerkerj.in/blog/2014/10/15/swift-d15/

今天要來練習新的東西 - TableView

據同事說明,TableView 是最常用到的 View 之一

在我們的實戰開發中也會用到 TableView

因此今天就先簡單的來建立出單頁純顯示資料的 TableView

TableView 的概念大概是如下圖:

長得有點像 ListView 但是每一行又可以多切開,放一些東西

每一行都稱之為一個 TableViewCell

今天就來要簡單寫一個資料已經預先定義好,並且會顯示在 view 上面的 TableView

要進行下去之前當然就先開一個新的練習專案囉

開啟完專案後,首先第一件事情就是進 storyboard

選擇 TableView 拉進 storyboard 裡

接著再選擇 TableViewCell 拉進 TableView 中

透過此圖,我們瞭解到可以打開 storyboard 的 tree 來看看它們之間的關係

下面此步驟很重要,資料的連接就靠這條線:

先選取 TableView (可以使用階層樹或是點擊 storyboard),然後選擇右方的 connection inspector (右上角的最右邊的那一個按鈕)

裡頭有個 dataSource 以及 delegate

我們先按住 dataSource 右邊的空心圓按鈕,拖曳拉到 storyboard 中的 ViewController,如上圖所示

這樣子等等在程式碼中產生的資料才會有和 storyboard 的 UI 做連結

最後一個和 storyboard 相關的操作是將 storyboard 的 TableView 和 程式碼做連結,好方便我們在程式碼中對 storyborad 的 TableView 做操作

之前就有做過類似的事情了,就是按著 ctrl + 拖曳拉進程式碼中:

給他個名稱:

這時候的程式應該會長這樣:

import UIKit

class ViewController: UIViewController {

    @IBOutlet var tableSample: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

再來就是程式的部分了

先直接貼出 ViewController 的程式碼:

import UIKit

class ViewController: UIViewController, UITableViewDataSource {

    @IBOutlet var tableSample: UITableView!

    var items: [String] = []

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        for var i = 0 ; i <= 100 ; i++ {
            items.append("\(i)")
        }

        self.tableSample.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.items.count
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{

        var cell: UITableViewCell = self.tableSample.dequeueReusableCellWithIdentifier("cell") as UITableViewCell
        cell.textLabel?.text = self.items[indexPath.row]

        return cell
    }
}

這中間了幾件事:

viewDidload 產生一個 0 ~ 100 的陣列,並且向 tableSample 註冊了一個 cell 物件,並且設定該物件的 identifier 為 「cell」

接著下面兩個 function 是實作顯示資料以及資料行數的部分:

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  return self.items.count
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{

  var cell: UITableViewCell = self.tableSample.dequeueReusableCellWithIdentifier("cell") as UITableViewCell
  cell.textLabel?.text = self.items[indexPath.row]

  return cell
}

第一個 tableView 的方法是回傳這個 tableView 的資料有多少筆

第二個 tableView 則是根據每一行的值,產生一個 cell,將陣列值丟進該 cell 的文字,並且回傳

這樣理論上就會顯示 0 ~ 100 個 cell,裡面的值分別是依據順序而顯示號碼

注意在程式的 class 那一行

class ViewController: UIViewController, UITableViewDataSource {

有多一個 UITableViewDataSource, 因為我們要將資料丟到 UITableView 中,因此需要使用繼承該類別

等明天我們要做換頁功能時,就要加入其他的類別了

程式撰寫好後,執行看看吧!

應該就會長這樣子喲:


上一篇
[Swift-d14] - Basic - Navigation View 2 + ViewController
下一篇
[Swift-d16] - Basic - Table View 2 換頁 (Delegate)
系列文
Swift - 從菜菜鳥到菜鳥的 30 天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
henryfan
iT邦新手 5 級 ‧ 2014-10-16 15:15:58

TableView 感覺是個很重要的東西,需要多花一些時間去學習才行!

我要留言

立即登入留言